import ast
import keyword
import re

from 程序核心代码.mvvm重构.基础定义.基础模型.ast节点模型基类 import ast节点基础模型
from 程序核心代码.mvvm重构.基础定义.节点管理器.自动节点注册表 import 注册节点模型
import logging
logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s')
日志记录器 = logging.getLogger(__name__)

@注册节点模型(ast.Name)
class 变量节点模型(ast节点基础模型):
    def __init__(self,ast节点, 所属节点模型管理器,上级节点=None,节点位置=None):
        super().__init__(ast节点, 所属节点模型管理器,  "变量节点",节点位置=节点位置,上级节点=上级节点)
        self.调试模式 = False  # 调试模式开关
        # 设置日志等级
        if self.调试模式:
            日志记录器.setLevel(logging.DEBUG)
            日志记录器.debug(f"{self.__class__.__name__}调试模式已开启")
        else:
            日志记录器.setLevel(logging.ERROR)  # 只显示警告及以上级别的日志
        self.参数名="变量名："
        self.参数值=ast节点.id
        self.添加接口到节点("数据流","输入","数据输入")
        #self.设置属性("参数值修改回调)",self.参数值修改回调)
        self.参数值修改回调=self.参数值修改回调函数

    def 参数值修改回调函数(self,新参数值):
        if self.参数值检查(新参数值):
            self.参数值=新参数值
            日志记录器.debug( f"变量名修改为{新参数值}")
            return True
        else:
            日志记录器.debug( f"变量名修改失败")
            return False

    def 参数值检查(self,参数值):
        # 检查是否符合变量命名规则
        if not 参数值.isidentifier():
            日志记录器.debug(f"变量名 '{参数值}' 不符合命名规则")
            return False
        # 检查是否为 Python 关键词
        if keyword.iskeyword(参数值):
            日志记录器.debug(f"变量名 '{参数值}' 是 Python 关键词")
            return False
        日志记录器.debug(f"变量名 '{参数值}' 是合法的")
        return True
